home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / phpMyAdmin / libraries / dbi / mysql.dbi.lib.php next >
PHP Script  |  2005-03-24  |  9KB  |  278 lines

  1. <?php
  2. /* $Id: mysql.dbi.lib.php,v 2.37 2005/03/24 20:57:00 rabus Exp $ */
  3. // vim: expandtab sw=4 ts=4 sts=4:
  4.  
  5. /**
  6.  * Interface to the classic MySQL extension
  7.  */
  8.  
  9. /**
  10.  * Loads the mysql extensions if it is not loaded yet
  11.  */
  12. if (!@function_exists('mysql_connect')) {
  13.     PMA_dl('mysql');
  14. }
  15.  
  16. // check whether mysql is available
  17. if (!@function_exists('mysql_connect')) {
  18.     require_once('./libraries/header_http.inc.php');
  19.     echo sprintf($strCantLoad, 'mysql') . '<br />' . "\n"
  20.          . '<a href="./Documentation.html#faqmysql" target="documentation">' . $GLOBALS['strDocu'] . '</a>' . "\n";
  21.     exit;
  22. }
  23.  
  24. // MySQL client API
  25. if (!defined('PMA_MYSQL_CLIENT_API')) {
  26.     if (function_exists('mysql_get_client_info')) {
  27.         $client_api = explode('.', mysql_get_client_info());
  28.         define('PMA_MYSQL_CLIENT_API', (int)sprintf('%d%02d%02d', $client_api[0], $client_api[1], intval($client_api[2])));
  29.         unset($client_api);
  30.     } else {
  31.         define('PMA_MYSQL_CLIENT_API', 32332); // always expect the worst...
  32.     }
  33. }
  34.  
  35. function PMA_DBI_connect($user, $password, $is_controluser = FALSE) {
  36.     global $cfg, $php_errormsg;
  37.  
  38.     $server_port   = (empty($cfg['Server']['port']))
  39.                    ? ''
  40.                    : ':' . $cfg['Server']['port'];
  41.  
  42.     if (strtolower($cfg['Server']['connect_type']) == 'tcp') {
  43.         $cfg['Server']['socket'] = '';
  44.     }
  45.  
  46.     $server_socket = (empty($cfg['Server']['socket']))
  47.                    ? ''
  48.                    : ':' . $cfg['Server']['socket'];
  49.  
  50.     if (PMA_PHP_INT_VERSION >= 40300 && PMA_MYSQL_CLIENT_API >= 32349) {
  51.         $client_flags = $cfg['Server']['compress'] && defined('MYSQL_CLIENT_COMPRESS') ? MYSQL_CLIENT_COMPRESS : 0;
  52.         // always use CLIENT_LOCAL_FILES as defined in mysql_com.h
  53.         // for the case where the client library was not compiled
  54.         // with --enable-local-infile
  55.         $client_flags |= 128;
  56.     }
  57.  
  58.     if (empty($client_flags)) {
  59.         $connect_func = 'mysql_' . ($cfg['PersistentConnections'] ? 'p' : '') . 'connect';
  60.         $link = @$connect_func($cfg['Server']['host'] . $server_port . $server_socket, $user, $password);
  61.     } else {
  62.         if ($cfg['PersistentConnections']) {
  63.             $link = @mysql_pconnect($cfg['Server']['host'] . $server_port . $server_socket, $user, $password, $client_flags);
  64.         } else {
  65.             $link = @mysql_connect($cfg['Server']['host'] . $server_port . $server_socket, $user, $password, FALSE, $client_flags);
  66.         }
  67.     }
  68.  
  69.     if (empty($link)) {
  70.         PMA_auth_fails();
  71.     } // end if
  72.     
  73.     PMA_DBI_postConnect($link, $is_controluser);
  74.  
  75.     return $link;
  76. }
  77.  
  78. function PMA_DBI_select_db($dbname, $link = NULL) {
  79.     if (empty($link)) {
  80.         if (isset($GLOBALS['userlink'])) {
  81.             $link = $GLOBALS['userlink'];
  82.         } else {
  83.             return FALSE;
  84.         }
  85.     }
  86.     if (PMA_MYSQL_INT_VERSION < 40100) {
  87.         $dbname = PMA_convert_charset($dbname);
  88.     }
  89.     return mysql_select_db($dbname, $link);
  90. }
  91.  
  92. function PMA_DBI_try_query($query, $link = NULL, $options = 0) {
  93.     if (empty($link)) {
  94.         if (isset($GLOBALS['userlink'])) {
  95.             $link = $GLOBALS['userlink'];
  96.         } else {
  97.             return FALSE;
  98.         }
  99.     }
  100.     if (defined('PMA_MYSQL_INT_VERSION') && PMA_MYSQL_INT_VERSION < 40100) {
  101.         $query = PMA_convert_charset($query);
  102.     }
  103.     if ($options == ($options | PMA_DBI_QUERY_STORE)) {
  104.         return @mysql_query($query, $link);
  105.     } elseif ($options == ($options | PMA_DBI_QUERY_UNBUFFERED)) {
  106.         return @mysql_unbuffered_query($query, $link);
  107.     } else {
  108.         return @mysql_query($query, $link);
  109.     }
  110. }
  111.  
  112. // The following function is meant for internal use only.
  113. // Do not call it from outside this library!
  114. function PMA_mysql_fetch_array($result, $type = FALSE) {
  115.     global $cfg, $allow_recoding, $charset, $convcharset;
  116.  
  117.     if ($type != FALSE) {
  118.         $data = mysql_fetch_array($result, $type);
  119.     } else {
  120.         $data = mysql_fetch_array($result);
  121.     }
  122.  
  123.     /* No data returned => do not touch it */
  124.     if (! $data) return $data;
  125.     
  126.     if (!defined('PMA_MYSQL_INT_VERSION') || PMA_MYSQL_INT_VERSION >= 40100
  127.         || !(isset($cfg['AllowAnywhereRecoding']) && $cfg['AllowAnywhereRecoding'] && $allow_recoding)) {
  128.         /* No recoding -> return data as we got them */
  129.         return $data;
  130.     } else {
  131.         $ret = array();
  132.         $num = mysql_num_fields($result);
  133.         $i = 0;
  134.         for ($i = 0; $i < $num; $i++) {
  135.             $name = mysql_field_name($result, $i);
  136.             $flags = mysql_field_flags($result, $i);
  137.             /* Field is BINARY (either marked manually, or it is BLOB) => do not convert it */
  138.             if (stristr($flags, 'BINARY')) {
  139.                 if (isset($data[$i])) $ret[$i] = $data[$i];
  140.                 if (isset($data[$name])) $ret[PMA_convert_display_charset($name)] = $data[$name];
  141.             } else {
  142.                 if (isset($data[$i])) $ret[$i] = PMA_convert_display_charset($data[$i]);
  143.                 if (isset($data[$name])) $ret[PMA_convert_display_charset($name)] = PMA_convert_display_charset($data[$name]);
  144.             }
  145.         }
  146.         return $ret;
  147.     }
  148. }
  149.  
  150. function PMA_DBI_fetch_array($result) {
  151.     return PMA_mysql_fetch_array($result);
  152. }
  153.  
  154. function PMA_DBI_fetch_assoc($result) {
  155.     return PMA_mysql_fetch_array($result, MYSQL_ASSOC);
  156. }
  157.  
  158. function PMA_DBI_fetch_row($result) {
  159.     return PMA_mysql_fetch_array($result, MYSQL_NUM);
  160. }
  161.  
  162. function PMA_DBI_free_result($result) {
  163.     if (!is_bool($result)) {
  164.         return mysql_free_result($result);
  165.     } else {
  166.         return 0;
  167.     }
  168. }
  169.  
  170. function PMA_DBI_getError($link = NULL) {
  171.     unset($GLOBALS['errno']); 
  172.     if (empty($link)) {
  173.         if (isset($GLOBALS['userlink'])) {
  174.             $link = $GLOBALS['userlink'];
  175.  
  176. // Do not stop now. On the initial connection, we don't have a $link,
  177. // we don't have a $GLOBALS['userlink'], but we can catch the error code
  178. //        } else {
  179. //            return FALSE;
  180.        }
  181.     }
  182.  
  183.     if (mysql_errno()) {
  184.         $error = mysql_errno();
  185.         $error_message = mysql_error();
  186.     } elseif ($link) {
  187.         $error = mysql_errno($link);
  188.         $error_message = mysql_error($link);
  189.     }
  190.  
  191.     // keep the error number for further check after the call to PMA_DBI_getError() 
  192.     if (isset($error) && $error) {
  193.         $GLOBALS['errno'] = $error;
  194.     } else {
  195.         return FALSE;
  196.     }
  197.  
  198. // Some errors messages cannot be obtained by mysql_error()
  199.     if ($error && $error == 2002) {
  200.         $error = '#' . ((string) $error) . ' - ' . $GLOBALS['strServerNotResponding'] . ' ' . $GLOBALS['strSocketProblem'];
  201.     } elseif ($error && $error == 2003) {
  202.         $error = '#' . ((string) $error) . ' - ' . $GLOBALS['strServerNotResponding'];
  203.     } elseif ($error && defined('PMA_MYSQL_INT_VERSION') && PMA_MYSQL_INT_VERSION >= 40100) {
  204.         $error = '#' . ((string) $error) . ' - ' . $error_message;
  205.     } elseif ($error) {
  206.         $error = '#' . ((string) $error) . ' - ' . PMA_convert_display_charset($error_message);
  207.     }
  208.     return $error;
  209. }
  210.  
  211. function PMA_DBI_close($link = NULL) {
  212.     if (empty($link)) {
  213.         if (isset($GLOBALS['userlink'])) {
  214.             $link = $GLOBALS['userlink'];
  215.         } else {
  216.             return FALSE;
  217.         }
  218.     }
  219.     return @mysql_close($link);
  220. }
  221.  
  222. function PMA_DBI_num_rows($result) {
  223.     if (!is_bool($result)) {
  224.         return mysql_num_rows($result);
  225.     } else {
  226.         return 0;
  227.     }
  228. }
  229.  
  230. function PMA_DBI_insert_id($link = NULL) {
  231.     if (empty($link)) {
  232.         if (isset($GLOBALS['userlink'])) {
  233.             $link = $GLOBALS['userlink'];
  234.         } else {
  235.             return FALSE;
  236.         }
  237.     }
  238.     return mysql_insert_id($link);
  239. }
  240.  
  241. function PMA_DBI_affected_rows($link = NULL) {
  242.     if (empty($link)) {
  243.         if (isset($GLOBALS['userlink'])) {
  244.             $link = $GLOBALS['userlink'];
  245.         } else {
  246.             return FALSE;
  247.         }
  248.     }
  249.     return mysql_affected_rows($link);
  250. }
  251.  
  252. function PMA_DBI_get_fields_meta($result) {
  253.     $fields       = array();
  254.     $num_fields   = mysql_num_fields($result);
  255.     for ($i = 0; $i < $num_fields; $i++) {
  256.         $fields[] = PMA_convert_display_charset(mysql_fetch_field($result, $i));
  257.     }
  258.     return $fields;
  259. }
  260.  
  261. function PMA_DBI_num_fields($result) {
  262.     return mysql_num_fields($result);
  263. }
  264.  
  265. function PMA_DBI_field_len($result, $i) {
  266.     return mysql_field_len($result, $i);
  267. }
  268.  
  269. function PMA_DBI_field_name($result, $i) {
  270.     return mysql_field_name($result, $i);
  271. }
  272.  
  273. function PMA_DBI_field_flags($result, $i) {
  274.     return PMA_convert_display_charset(mysql_field_flags($result, $i));
  275. }
  276.  
  277. ?>
  278.